package group4_张承财;


import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class WorkCheck {

    Map<String, String> map2 = new HashMap<String, String>();
    String path="E:\\面向对象程序设计Java2016级信本1班实验3";

    File file1=new File(path);
    File [] files1=file1.listFiles();

    public  void HomeworkCheck() {

        Map<String, Integer> map = new HashMap<String, Integer>();
        Map<String,Integer> map1=new HashMap<String,Integer>();



        //String filename = null;


        /*1.获取学号并存入map集合*/
        try {

            File file = new File("D:\\面向对象程序设计Java2016级信本1班实验2");

            File[] files = file.listFiles();

            for (File f : files) {

                //正则表达式
                //Matcher 对象是对输入字符串进行解释和匹配操作的引擎。
                //pattern 对象是一个正则表达式的编译表示。

                //面向对象程序设计Java2016级信本1班1606101002肖林实验3
                //正则表达式，模式匹配

                //matcher:原始字符串
                //compile:模式   想要得到的信息
                Matcher matcher = Pattern.compile("信本1班(\\d+)(.*)")  //"\d" 匹配数字字符  1606101002
                        .matcher(f.getName()); //getname（）获取文件名

                while (matcher.find()) {

                    map.put(matcher.group(1), 0);

                }

                //System.out.println(filename);

            }

            /*2.生成TXT名单文件*/
            StringBuffer stringBuffer = new StringBuffer();
            FileWriter fileWriter = new FileWriter("D:\\names.txt", true);
            Set set = map.entrySet();

            //Iterator迭代器 ,可以遍历并选择序列中的对象
            Iterator iterator = set.iterator();

            while (iterator.hasNext()) {  //hasNext()检查序列中是否还有元素
                Map.Entry entry = (Map.Entry) iterator.next();  //获取序列中下一个元素，并将 其存入entry对象中
                stringBuffer.append(entry.getKey() + "    " + entry.getValue() + "\r\n");
            }

            fileWriter.write(stringBuffer.toString());  //写入文件
            fileWriter.close();



            /*3.获取要检查的作业中的学生学号，并存入map1中*/

            for (File f1:files1){
                Matcher matcher1 = Pattern.compile("信本1班(\\d+)(.*)")  //"\d" 匹配数字字符  1606101002
                        .matcher(f1.getName()); //getname（）获取文件名

                while (matcher1.find()) {
                    map1.put(matcher1.group(1),1);

                }
            }

            /*4.判断收到的作业名单是否存在于原始名单*/
            Set set1=map.keySet();
            Iterator iterator1 = set1.iterator();

            StringBuffer sb=new StringBuffer();

            Object object=null;

            int count=0;

            String sno=null;

            while (iterator1.hasNext()) {  //hasNext()检查序列中是否还有元素
                object= iterator1.next();  //获取序列中下一个元素，并将 其存入entry对象中

                if (!map1.containsKey(object)){

                    sno=object+"";
                    count++;

                    for (File f1 : files) {


                        Matcher matcher2 = Pattern.compile("信本1班"+sno+"(\\D*)实验")  //"\d" 匹配数字字符  1606101002
                                .matcher(f1.getName()); //getname（）获取文件名

                        while (matcher2.find()) {

                            sb.append(matcher2.group(1)+"\t"+sno+"\r\n");
                            System.out.println("姓名："+matcher2.group(1)+"\t"+"学号:"+sno+"的同学未交作业");

                        }

                    }
                }
            }

            System.out.println("本次作业共"+count+"人没交");


            /*5.生成未交作业人员名单*/
            File f=new File("D:\\未交作业人员名单.txt");
            f.createNewFile();

            FileWriter fw=new FileWriter(f);

            fw.write(sb.toString());
            fw.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public  void demand(){

        Object obj=new Object();

        for (File f1:files1){
            Matcher matcher2 = Pattern.compile("信本1班(\\d+)(\\D*)实验")  //"\d" 匹配数字字符  1606101002
                    .matcher(f1.getName()); //getname（）获取文件名
            while (matcher2.find()) {
                map2.put(matcher2.group(1),matcher2.group(2));

            }
        }

        System.out.println("请输入要查询的同学的学号：");

        Scanner sc=new Scanner(System.in);
        String  num=sc.next();

        obj=map2.get(num);

        if (map2.containsKey(num)){
            System.out.println("已交！");
        }else{

            System.out.println("未交，请尽快提交！");
        }
    }
}
